﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Windows.Forms;

namespace CProd
{
    public partial class frmSaveLinhas_Tarefas : Form
    {
        #region Declarações

        private SqlDataAdapter _daDados;
        private DataTable dtDados = new DataTable("dtDados");
        private DataView _dvDados;
        private String _dataIn, _dataFim;
        private StreamWriter _sw;
        private List<string> _lines2Write;
        private string[] _ordemdeproducao;

        #endregion

        public frmSaveLinhas_Tarefas()
        { InitializeComponent(); }

        private void frmSaveLinhas_Tarefas_Load(object sender, EventArgs e)
        {
            _daDados = new SqlDataAdapter("SELECT * From Linhas_Tarefas", frmEntrada.conn);
            _daDados.Fill(dtDados);

            _dvDados = dtDados.DefaultView;
            _dvDados.Sort = "Linha Asc";

            if (_dvDados.Count < 1) return;
            _dvDados.Table.Columns[3].ColumnName = "Descricao";

            #region Preenche Combos

            for (int i = 0; i < _dvDados.Count; i++)
            {
                if (i == 0)
                {
                    cbLinhas1.Items.Add(_dvDados[i]["Linha"].ToString().Trim());
                    cbLinhas2.Items.Add(_dvDados[i]["Linha"].ToString().Trim());
                }
                else
                {
                    if (_dvDados[i]["Linha"].ToString() != _dvDados[i - 1]["Linha"].ToString())
                    {
                        cbLinhas1.Items.Add(_dvDados[i]["Linha"].ToString().Trim());
                        cbLinhas2.Items.Add(_dvDados[i]["Linha"].ToString().Trim());
                    }
                }
            }

            #endregion

            cbLinhas1.SelectedIndex = 0;
            cbLinhas2.SelectedIndex = 0;
        }

        private void btnSair_Click(object sender, EventArgs e)
        { Close(); }

        private void btSave_Click(object sender, EventArgs e)
        {
            _dataIn = Convert.ToDateTime(dtInicio.Text).ToString("dd.MM.yyyy");
            _dataFim = Convert.ToDateTime(dtFim.Text).AddDays(1).ToString("dd.MM.yyyy");

            if (dtDados.Rows.Count > 0)
            {
                _dvDados.RowFilter = string.Format("([Linha] >= '{0}' and [Linha] <= '{1}') and ([Data] >= '#{2}#' and [Data] <='#{3}#')",
                    cbLinhas1.SelectedItem, cbLinhas2.SelectedItem, _dataIn, _dataFim);

                _dvDados.Sort = "Id Asc";

                if (_dvDados.Count > 0)
                {
                    SaveFileDialog svFile = new SaveFileDialog
                            {
                                AddExtension = true,
                                Filter = "Vírgula Flutuante(*.csv)|*.csv|Ficheiro de Texto(*.txt)|*.txt"
                            };

                    if (svFile.ShowDialog() == DialogResult.OK) dataTableToTextFile(_dvDados, svFile.FileName);
                }
                else MessageBox.Show("Não tem dados para gravar.");
            }
            else MessageBox.Show("Não tem dados para gravar.");
        }

        #region "Converts the Given Datatable to TextFile"

        public void dataTableToTextFile(DataView dvToText, string filePath)
        {
            _sw = new StreamWriter(filePath,false, System.Text.Encoding.Unicode);
            
            #region "Write Header Titles"
            //Colunas Tabela SQL
            for (int i = 1; i < 9; i++)
                _sw.Write(dvToText.Table.Columns[i].ColumnName + ";");
            //Colunas Ordem de Produção
            _sw.WriteLine("N.O. Produçao;Lote;Cod. Produto;D. Produto;Cod. Cliente;D. Cliente;Kilos;Unidades;N. Encomenda;P. Encomenda;Tempo;Fieira;N. Fieiras;Desperdicio");
            #endregion

            #region "For Data in the Rows"

            _lines2Write = new List<string>();
            foreach (DataRowView row in dvToText)
            {
                string[] text2Insert = new string[1];
                #region "Linhas em Produção"
                if (row["Estado"].ToString() == "Em Producao")
                {
                    for (int i = 1; i < 9; i++)
                    {
                        if (i != 7) text2Insert[0] += row[i] + ";";
                        else text2Insert[0] += ";";
                    }                    
                    _ordemdeproducao = row["Observacoes"].ToString().Replace('"', ' ').Replace("\r\n", " ").Split('#');
                    //var consumo = ordem[14];

                    for (var i = 0; i < 13; i++) text2Insert[0] += _ordemdeproducao[i] + ";";                                        
                }
                #endregion

                #region "Linhas"
                else
                {
                    for (int i = 1; i < dvToText.Table.Columns.Count; i++)
                        text2Insert[0] += (row[i].ToString().Replace("\r\n", " ") + ";");                                        
                }
                #endregion
                _lines2Write.Add(text2Insert[0]);
            }

            foreach (string str in _lines2Write) _sw.WriteLine(str);
            _sw.Close();

            #endregion

            MessageBox.Show("Ficheiro Gravado com sucesso", "");
        }
        #endregion
    }
}